#pragma once

#include <typedef.h>
//
#include <semaphore.hpp>
#include <utils.hpp>
//
#include <uorb_data.hpp>

class UorbUtils
{
public:
	UorbUtils();
	virtual ~UorbUtils();
	static UorbUtils* Instance();

	// 创建数据
	bool Create(const char* uorbName, int dataSize);
	// 发布新数据
	bool Publish(const char* uorbName, char* data, int size);
	// 订阅uORB
	int Subscribe(const char* uorbName);
	// 订阅uORB，如果订阅失败则创建uORB
	int SubscribeAuto(const char* uorbName, int size);
	// 如果数据未更新，则不处理
	bool Copy(const char* uorbName, int subId, char* data, int size);

private:
	Semaphore m_SemLock;
	std::map<const char*, UorbData*, ptr_cmp_s> m_UorbMap;
};
